#ifndef SERVER_NETWORK_H
#define SERVER_NETWORK_H

#include "config.h"       
#include <sys/socket.h>   
#include <netinet/in.h>   
#include <arpa/inet.h>    
#include <unistd.h>       

/**
 * 功能 初始化服务器监听套接字
 * 从配置读取IP和端口，返回监听fd
 * 参数
 * config 服务器配置结构体
 * 返回值
 * 监听fd 成功
 *  -1 失败
*/
int init_server_socket(ServerConfig *config);

/**
 * 功能 接受客户端连接
 * 接受客户端连接，返回客户端fd
 * 参数
 * listen_fd 监听fd
 * client_addr 保存客户端地址
 * 返回值
 * 客户端fd 成功
 *  -1 失败
*/
int accept_client(int listen_fd, struct sockaddr_in *client_addr);

/**
 * 功能 接收数据
 * 从指定套接字接收数据
 * 参数
 * sock_fd 套接字描述符
 * buffer 接收数据的缓冲区
 * buffer_size 缓冲区大小
 * 返回值
 * 实际接收的字节数 成功
 *  -1 失败
*/
ssize_t recv_data(int sock_fd, char *buffer, size_t buffer_size);

/**
 * 功能 发送数据
 * 向指定套接字发送数据
 * 参数
 * sock_fd 套接字描述符
 * data 发送的数据
 * 返回值
 * 实际发送的字节数 成功
 *  -1 失败
*/
ssize_t send_data(int sock_fd, const char *data);

#endif